package com.city.redis;

import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * Created with IntelliJ IDEA.
 * User: Cheng
 * Date: 2020/2/28
 * Time: 20:50
 * Description: No Description
 */
public class Test1 {
    //string类型java方式储存
    public static void main(String[] args) {
        //java操作redis
        //获取连接
        Jedis jedis = new Jedis();//默认"localhost", 6379
        //操作
        jedis.set("name","city");
        String name = jedis.get("name");//Java中命令和redis客户端命令大致相同
        System.out.println(name);

        //setex（）方法储存可以指定过期时间的k=v
        jedis.setex("activecode",20,"hehe");

        //关闭连接
        jedis.close();
    }

    //hash
    @Test
    public void Test1(){
        Jedis jedis = new Jedis();
        jedis.hset("user","name","city");
        jedis.hset("user","name1","city1");
        jedis.hset("user","name2","city2");
        System.out.println(jedis.hget("user","name"));
        System.out.println(jedis.hgetAll("user"));
        //获取所有key
        Map<String, String> user = jedis.hgetAll("user");
        Set<String> strings = user.keySet();
        for (String string : strings) {
            String s = user.get(string);
            System.out.println(string+"="+s);
        }
        jedis.close();
    }

    //list
    @Test
    public void Test2(){
        Jedis jedis = new Jedis();
        jedis.lpush("mylist","a","b","c");
        jedis.rpush("mylist","a","b","c");
        List<String> mylist = jedis.lrange("mylist", 0, -1);
        for (String s : mylist) {
            System.out.println(s);
        }
        //从左边弹出元素
        jedis.lpop("mylist");
        jedis.close();
    }

    /**
     * set 数据结构操作
     */
    @Test
    public void test5(){
        //1. 获取连接
        Jedis jedis = new Jedis();//如果使用空参构造，默认值 "localhost",6379端口
        //2. 操作


        // set 存储
        jedis.sadd("myset","java","php","c++");

        // set 获取
        Set<String> myset = jedis.smembers("myset");
        System.out.println(myset);

        //3. 关闭连接
        jedis.close();
    }

    /**
     * sortedset 数据结构操作
     */
    @Test
    public void test6(){
        //1. 获取连接
        Jedis jedis = new Jedis();//如果使用空参构造，默认值 "localhost",6379端口
        //2. 操作
        // sortedset 存储
        jedis.zadd("mysortedset",3,"亚瑟");
        jedis.zadd("mysortedset",30,"后裔");
        jedis.zadd("mysortedset",55,"孙悟空");

        // sortedset 获取
        Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);

        System.out.println(mysortedset);


        //3. 关闭连接
        jedis.close();
    }

    /**
     * jedis连接池使用
     */
    @Test
    public void test7(){

        //0.创建一个配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(50);
        config.setMaxIdle(10);

        //1.创建Jedis连接池对象
        JedisPool jedisPool = new JedisPool(config,"localhost",6379);

        //2.获取连接
        Jedis jedis = jedisPool.getResource();
        //3. 使用
        jedis.set("hehe","heihei");


        //4. 关闭 归还到连接池中
        jedis.close();;

    }

    /**
     * jedis连接池工具类使用
     */
    @Test
    public void test8(){

        //通过连接池工具类获取
        Jedis jedis = JedisPoolUtils.getJedis();



        //3. 使用
        jedis.set("hello","world");


        //4. 关闭 归还到连接池中
        jedis.close();

    }
}